﻿using Prism.Ioc;
using Prism.Modularity;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace PrismModule
{
    public class StartUp : PrismBootstrapper
    {
        protected override DependencyObject CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {

        }

        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            // 第一种方式
            //moduleCatalog.AddModule<AModule>();

            // 第二种方式
            //Type type = typeof(AModule);
            //moduleCatalog.AddModule(new ModuleInfo
            //{
            //    ModuleName = type.Name,
            //    ModuleType = type.AssemblyQualifiedName,
            //    // 标记Module按需加载
            //    InitializationMode= InitializationMode.OnDemand
            //});
        }

        // 通过相关配置文件生成Module信息
        protected override IModuleCatalog CreateModuleCatalog()
        {
            // 第三种方式
            // App.config
            // 这里可以不用引用对应Moduler程序集
            //return new ConfigurationModuleCatalog();

            // 第四种方式
            // XML文件配置
            // 所有需要加载的Module程序集必须由当前程序集引用
            // 如果引用，会出现以下异常：
            // Prism.Modularity.ModuleTypeLoaderNotFoundException:“There is currently no moduleTypeLoader in the ModuleManager that can retrieve the specified module.”
            //return new XamlModuleCatalog(".\\ModuleConfig.xml");
            //return new XamlModuleCatalog("pack://application:,,,/ZHaoxi.PrismModule;component/ModuleConfig.xml");

            // 第五种方式（推荐）
            return new DirectoryModuleCatalog()
            {
                // 配置将在扫描的目录
                ModulePath = ".\\ModulePath"
            };
        }
    }
}
